Skip to content

Add attested PostgreSQL notification broker lifecycle - #1820

Draft
Zetazzz wants to merge 4 commits into
feat/exact-pg-identity-notification-brokerfrom
feat/pg-notification-broker-lifecycle
Draft

Add attested PostgreSQL notification broker lifecycle#1820
Zetazzz wants to merge 4 commits into
feat/exact-pg-identity-notification-brokerfrom
feat/pg-notification-broker-lifecycle

Conversation

@Zetazzz

@Zetazzz Zetazzz commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

A dedicated, attested PostgreSQL listener now serves exact-topic notification leases. The broker pins one connection per complete listener identity, reference-counts channel ownership, bounds subscriber queues, latches fatal failures, and awaits UNLISTEN/client return/pool lease release. Role attestation runs on the same pinned client before LISTEN and checks the target, login posture, memberships, cross-database access, and application privileges.

This is the notification broker split from #1754. It depends on #1754's exact connection identities/leases and preserves #1752 checkout sanitation. Runtime credential selection/wiring remains in the following PR; enabling the generation subscription path is a separate F24 consumer.

Validation: 108 unit tests passed. Both dedicated PostgreSQL integration suites ran with their role gate enabled: 4 tests passed, covering role rejection, real delivery, shared listener ownership, and clean teardown/reacquisition. CJS/ESM build passed. CI now provisions the isolated listener fixture and executes these two suites after the pg-postgres batch; they are no longer verified only by a skipped unit run. The fixture must run only in a disposable PostgreSQL cluster because it revokes PUBLIC cross-database CONNECT.

Landing order: #1744#1752#1754 → this PR → runtime wiring. Runtime wiring additionally requires #1747.

Refs constructive-io/constructive-planning#1693 (F12).

Full CI passed all 17 jobs on c95de1e013a3e1b47e25c3a2747ce931326f3e65, including the dedicated notification integration step.

Runtime wiring is now split into #1821, stacked on #1820, with an explicit #1747 release prerequisite.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant